REST API 구현

✒️ 2025-06-25 13:13 내용 수정


@RestController

@RestController
public class UserController { 
	// 데이터를 반환하는 endpoint
    @GetMapping("/api/data")
    public String getData() {  
        return "반환용 데이터";
    }  
}

@RequestBody

// 클라이언트에서 요청 전송
fetch('/api/user/', {
	method: 'POST',
	headers: {
		'Content-Type': 'application/json' // json body 명시
	},
	body: JSON.stringify({
		name: '홍길동', email: 'hong@aaa.ccc'
	})
});
POST /api/user HTTP/1.1
Content-Type: application/json

{
	"name" : "홍길동",
	"email" : "hong@aaa.ccc"
}
@RestController
public class UserController { 
    @PostMapping("/api/user")
    public ResponseEntity<String> addUser(@RequestBody User user) {  
        // 사용자 추가 동작
        return ResponseEntity.ok("사용자 추가 완료");
    }  
}
public class User {
	private String name;
	private String email;

	public User() {}
	public User(String name, String email) {
		this.name = name;
		this.email = email;
	}

	public void setName(String name) {this.name = name;}
	public String getName() {return this.name;}
	public void setEmail(String email) {this.email = email;}
	public String getEmail() {return this.email;}
}

@ResponseBody

@Controller
public class UserController { 
    @GetMapping("/user/{id}")
    @ReponseBody
    public ResponseEntity<User> getUser(@PathVariable int id) {  
        // 사용자 검색 동작
        UserDAO dao = UserDAO.getInstance();
        User user = dao.getUser(id);
        return ResponseEntity.ok(user); // Body에 user 첨부 
    }  
}

// 위와 동일한 동작
@RestController
public class UserController { 
    @GetMapping("/user/{id}")
    public ResponseEntity<User> getUser(@PathVariable int id) {  
        // 사용자 검색 동작
        UserDAO dao = UserDAO.getInstance();
        User user = dao.getUser(id);
        return ResponseEntity.ok(user); // Body에 user 첨부 
    }  
}
HTTP/1.1 200 OK
Content-Type: application/json

{
	"name" : "홍길동",
	"email" : "hong@aaa.ccc"
}

@Controller과 @RestController의 차이

@Controller 방식

@Controller  
public class UserController {  
    // page를 반환하는 endpoint
    @GetMapping("/form")  
    public String getPage() {  
        return "form";  // form.html 반환
    }
}
@Controller  
public class ProductController {  
    @PostMapping("/product")  
    public String addProduct(
	    @RequestParam String name,
	    @RequestParam String category,
	    @RequestParam String origin
	    ) {  
	    // Product의 데이터를 query string으로 받음
	    // 파라미터가 너무 많으면 관리가 어려움
        return "product";
    }
}
@Controller  
public class ProductController {  
	@PostMapping("/product")
	public String addProduct (
		@ModelAttribute Product product
	) {
		// form 데이터 수신 -> Product에 Mapping
		// 관리가 훨씬 수월함
		return "product";
	}
}

@RestController 방식

@RestController
public class UserController { 
	// 데이터를 반환하는 endpoint
    @GetMapping("/api/data")
    public String getData() {  
        return "반환용 데이터"; // 문자열 그대로 반환
    }  
}
@RestController
public class ProductController { 
    @PostMapping("/product")
    public ResponseEntity<String> addProduct(
	    @RequestBody Product product
    ) {  
        return ResponseEntity.ok("상품 추가 완료");
    }  
}

@Controller + @RestController

@Controller  
public class UserController {  
    // view page를 반환하는 endpoint
    @GetMapping("/form")  
    public String getPage() {  
        return "form";  
    }  

	// rest api
    @GetMapping("/api/data")  
    @ResponseBody  // 중요!
    public String getData() {  
        return "반환용 데이터";
    }  
}